이 문서는 설치된 버전에 포함된 Docker 설치 안내입니다. 예제의 버전과 네트워크 주소는 환경에 맞게 바꿔야 합니다. AMD64와 ARMv7 및 ARM64/v8용 이미지는 Docker Hub에서 확인할 수 있습니다.

준비

Docker를 먼저 설치합니다. Docker 설치 안내를 참고하세요. 일반 이미지는 초기 실행에 루트 권한이 필요합니다. SMB/CIFS 공유를 데이터 폴더로 사용하는 경우에는 관련 문제 해결 안내에 따라 nobrl과 noperm 마운트 옵션이 필요할 수 있습니다.

Docker Compose로 실행

Compose 파일을 받습니다.

wget https://raw.githubusercontent.com/TriliumNext/Notes/master/docker-compose.yml

docker-compose.yml을 열어 설정을 확인합니다. 원문 예제의 기본 데이터 경로는 ~/trilium-data이며 포트는 8080입니다. 다음 명령으로 백그라운드에서 시작합니다.

docker compose up -d

Docker 명령으로 실행

배포된 태그 목록에서 원하는 버전을 선택합니다. 아래 버전은 원문의 예제입니다.

docker pull triliumnext/notes:v0.91.6

latest는 나중에 새 이미지를 받을 때 버전이 달라질 수 있습니다. 동기화하는 인스턴스의 호환성을 유지하려면 버전을 고정하는 편이 좋습니다. 호스트에 데이터 폴더를 만들고 컨테이너에서 쓸 수 있도록 마운트합니다.

같은 컴퓨터에서만 접속

[VERSION]을 실제 태그로 바꿉니다. 테스트나 리버스 프록시 뒤에서 운영할 때 사용할 수 있습니다.

sudo docker run -t -i -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]

docker ps로 상태를 확인하고 브라우저에서 127.0.0.1:8080을 엽니다.

로컬 네트워크 연결 예제

다음 macvlan 예제의 인터페이스와 주소 범위는 실제 네트워크에 맞춰야 합니다.

docker network create -d macvlan -o parent=eth0 --subnet 192.168.2.0/24 --gateway 192.168.2.254 --ip-range 192.168.2.252/27 mynet
docker run --net=mynet -d -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]

일반 이미지에서 데이터의 사용자와 그룹 ID는 USER_UID와 USER_GID로 지정합니다.

docker run --net=mynet -d -p 127.0.0.1:8080:8080 -e "USER_UID=1001" -e "USER_GID=1001" -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]

컨테이너 주소를 확인한 뒤 로컬 네트워크에서 접속합니다.

docker ps
docker inspect [container_name]

모든 인터페이스에서 접속

다음 예제는 호스트의 모든 인터페이스에 포트를 엽니다. 외부 공개 범위는 방화벽과 프록시 설정도 함께 확인해야 합니다.

docker run -d -p 0.0.0.0:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]

docker ps에서 ID를 확인하고 docker stop <CONTAINER ID>로 중지합니다.

데이터 경로 변경

-v ~/YourOwnDirectory:/home/node/trilium-data triliumnext/notes:[VERSION]

콜론 앞은 호스트의 경로이고 뒤는 컨테이너 안의 경로입니다. Docker 볼륨 개요와 볼륨 사용 안내를 참고하세요.

리버스 프록시

Nginx 또는 Apache 안내를 참고하세요.

실행 사용자와 시간대

일반 이미지는 --user 대신 USER_UID와 USER_GID를 사용합니다. 시간대가 맞지 않으면 TZ에 시간대 식별자를 지정합니다. 한국은 Asia/Seoul입니다.

일반 사용자로 실행하는 이미지

rootless 계열은 컨테이너 안에서 루트가 아닌 trilium 사용자로 앱을 실행합니다. 데이터 경로는 일반 이미지와 다른 /home/trilium/trilium-data입니다. Debian과 Alpine 기반 변형을 제공합니다.

# Debian 기반 이미지
docker pull triliumnext/notes:rootless

# Alpine 기반 이미지
docker pull triliumnext/notes:rootless-alpine

일반 사용자로 실행하면 앱 프로세스의 권한을 줄일 수 있습니다. 호스트에서 Docker 데몬 자체를 비루트로 실행하는 설정과는 구분해야 합니다. 이미지 빌드 시 사용자를 만들고 별도 진입 스크립트 없이 실행합니다. 이 이미지에서는 --user로 UID와 GID를 지정할 수 있습니다.

Compose 예제

# 기본 UID/GID로 실행 (1000:1000)
docker-compose -f docker-compose.rootless.yml up -d

# 호스트 사용자에 맞춘 UID/GID로 실행
TRILIUM_UID=$(id -u) TRILIUM_GID=$(id -g) docker-compose -f docker-compose.rootless.yml up -d

# 데이터 폴더 지정
TRILIUM_DATA_DIR=/path/to/your/data TRILIUM_UID=$(id -u) TRILIUM_GID=$(id -g) docker-compose -f docker-compose.rootless.yml up -d

Docker 명령 예제

# 이미지 빌드
docker build -t triliumnext/notes:rootless -f apps/server/Dockerfile.rootless .

# 기본 UID/GID로 실행 (1000:1000)
docker run -d --name trilium -p 8080:8080 -v ~/trilium-data:/home/trilium/trilium-data triliumnext/notes:rootless

# 지정한 UID/GID로 실행
docker run -d --name trilium -p 8080:8080 --user $(id -u):$(id -g) -v ~/trilium-data:/home/trilium/trilium-data triliumnext/notes:rootless

환경 변수와 권한

TRILIUM_UID와 TRILIUM_GID는 Compose 설정을 통해 프로세스 ID를 지정하는 데 사용합니다. TRILIUM_DATA_DIR의 적용 위치는 사용한 Compose 파일을 확인하세요. 위 예제에서는 데이터 경로를 지정하는 변수로 사용합니다. 호스트 데이터 폴더의 소유권과 쓰기 권한이 실행 사용자에 맞아야 합니다.

# 데이터 폴더의 소유자가 UID 1001과 GID 1001인 예제:
TRILIUM_UID=1001 TRILIUM_GID=1001 docker-compose -f docker-compose.rootless.yml up -d

프로세스는 시작할 때 지정한 UID/GID로 실행합니다. 기존 방식의 usermod나 groupmod 진입 스크립트를 사용하지 않으며 실행 중 스스로 사용자 ID를 바꾸지 않습니다.

이미지 종류

원문의 Debian 변형은 Bullseye Slim을 기반으로 하며 apps/server/Dockerfile.rootless를 사용합니다. Alpine 변형은 크기가 작지만 환경에 따라 호환성 차이가 있을 수 있으며 apps/server/Dockerfile.alpine.rootless를 사용합니다.

사용자 지정 이미지 빌드

# UID/GID를 지정한 Debian 기반 이미지
docker build --build-arg USER=myuser --build-arg UID=1001 --build-arg GID=1001 \
  -t triliumnext/notes:rootless-custom -f apps/server/Dockerfile.rootless .

# UID/GID를 지정한 Alpine 기반 이미지
docker build --build-arg USER=myuser --build-arg UID=1001 --build-arg GID=1001 \
  -t triliumnext/notes:alpine-rootless-custom -f apps/server/Dockerfile.alpine.rootless .

빌드 인수 USER의 기본값은 trilium입니다. UID와 GID의 기본값은 각각 1000입니다.